// 立即执行函数： 执行完成以后立即释放
// let num1 = function test(a, b) {
//   console.log(test, '1111');
//   return a + b;
// } (1, 2);
// console.log(num1);


// (function test2 (a, b) {
//   console.log(a + b);
// }(1, 2))

// let test3 = function () {
//   console.log('test3');
// } ()
// console.log(test3);


// 函数声明变为表达式的方法 + - ！&& ||
// + function () {
//   console.log('+');
// } ();
// - function () {
//   console.log('-');
// } ();
// ! function () {
//   console.log('!');
// } ();
// 1 && function () {
//   console.log('&&');
// } ();
// 0 || function () {
//   console.log('||');
// } ();

// function test () {
//   var arr = [];
//   var i = 0
//   for (; i < 10;) {
//     arr[i] = function () {
//       console.log(i + '------');
//     }
//     i++
//   }
//   return arr;
// }
// var myArr = test();
// console.log(myArr);
// for (var j = 0; j < 10; j++) {
//   myArr[j]();
// }
// // 10 10 10 10 10 10 10 10 10 10 

// function test2 () {
//   var arr = [];
//   for (let i = 0; i < 10; i++) {
//     arr[i] = function () {
//       console.log(i + '------');
//     }
//   }
//   return arr;
// }
// var myArr = test2();
// for (var j = 0; j < 10; j++) {
//   myArr[j]();
// }
// // 0 1 2 3 4 5 6 7 8 9


// function test3 () {
//   let n = 10;
//   function a() {
//     console.log(n);
//     n++
//   }
//   function b() {
//     console.log(n);
//   }
//   return [a, b]
// }
// let arr = test3();
// console.log(arr);
// arr[0]();
// arr[1]();


// function test () {
//   for (var i = 0; i < 10; i++) {
//     (function () {
//       console.log(i + '------');
//     }())
//   }
// }
// test();
// // 0 1 2 3 4 5 6 7 8 9

  // function test2 () {
  //   var arr = [];
  //   for (let i = 0; i < 10; i++) {
  //     arr[i] = function (num) {
  //       console.log(num + '------');
  //     }
  //   }
  //   return arr;
  // }
  // var myArr = test2();
  // for (var j = 0; j < 10; j++) {
  //   myArr[j](j);
  // }
  // // 0 1 2 3 4 5 6 7 8 9

  // function test() {
  //   let arr = [];
  //   for (var i = 0; i < 10; i++) {
  //     (function (j) {
  //       arr[j] = function() {
  //         console.log(j, '--------');
  //       }
  //     } (i))
  //   }
  //   return arr;
  // } 

  // let myArr = test();
  // for (var j = 0; j < 10; j++) {
  //   myArr[j]();
  // }
  // // 0 1 2 3 4 5 6 7 8 9

  /**
   * 面试题
   */
  // let fn = (
  //   function test1 () {
  //     return 0
  //   },
  //   function test2 () {
  //     return '1'
  //   }
  // )();

  // console.log(typeof(fn));
  // console.log(fn);

  // let num = (1, 2);
  // console.log(num);

  /**
   * 面试题
   * (function b() {}) 自动忽略b
   */
  // var a = 10;
  // if (function b() {}) {
  //   a += typeof(b)
  // }
  // console.log(a); // '10undefined'


  // var name = "windowsName";
  // function sayName() {
  //   var name = "Jake";
  //   console.log(name, '----------1');   
  //   console.log(this, '-------2');   
  // }
  // sayName();
  // console.log(this, '----------3')


  /**
   * 面试题
   */
  // function test1() {
  //   function test2() {
  //     var b = 2;
  //     console.log(a);
  //   }
  //   var a = 1;
  //   return test2;
  // }
  // var c = 3;
  // var test3 = test1()
  // test3();

  // function test(a) {
  //   console.log(b);
  //   var b = 1 
  //   function b () {};
  //   console.log(b);
  // }
  // test(1)

  // 立即函数书写默认规则 立即函数前加上分号";" 防止报错
  ;(function() {})()
  ;(function() {})()
  ;+ function() {}()
  ;- function() {}()
  ;! function() {}()
  ;1 &&  function() {}()
  ;0 || function() {}()
